package com.bjsxt.chapter1_singleton;

/**
 * @ClassName SingletonDemo3
 * @Description 双重检测锁式单例模式
 * 变相的懒汉式
 * 这个模式将同步内容下放到if内部，提高了执行的效率，不必每次获取对象时都进行同步
 * 只有第一次才同步，创建了以后就没必要了。
 * 问题：由于编译器优化原因和jvm底层内部模型原因，
 * 偶尔会出问题，不建议使用。
 * @Author 黑马程序员
 * @Date 18:07 2024/6/18
 * @Version 1.0
 **/
public class SingletonDemo3 {
    // 类初始化时，不初始化这个对象(延时加载，真正用的时候再创建)。
    private static SingletonDemo3 instance = null;

    // 私有构造器
    private SingletonDemo3(){

    }

    public static  SingletonDemo3 getInstance(){
        if (instance == null){
            SingletonDemo3 sc;
            synchronized (SingletonDemo3.class){
                sc = instance;
                if (sc == null){
                    synchronized (SingletonDemo3.class){
                        if (sc == null){
                            sc = new SingletonDemo3();
                        }
                    }
                    instance = sc;
                }
            }
        }
        return instance;
    }
}
